using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace FinData.Services
{
    public class TradingCalendarService
    {
        private HashSet<DateTime> _tradingDays = new HashSet<DateTime>();
        private readonly string _calendarFilePath = "交易日历.csv";

        public void Initialize()
        {
            try
            {
                if (File.Exists(_calendarFilePath))
                {
                    var lines = File.ReadAllLines(_calendarFilePath).Skip(1); // 跳过标题行
                    foreach (var line in lines)
                    {
                        var dateStr = line.Trim();
                        if (DateTime.TryParse(dateStr, out DateTime date))
                        {
                            _tradingDays.Add(date.Date); // 只保留日期部分，不含时间
                        }
                    }
                    Console.WriteLine($"成功加载交易日历，共 {_tradingDays.Count} 个交易日");
                }
                else
                {
                    Console.WriteLine($"交易日历文件不存在: {_calendarFilePath}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"加载交易日历出错: {ex.Message}");
                // 出错时使用默认判断（周一到周五，不考虑节假日）
            }
        }

        /// <summary>
        /// 判断指定日期是否为交易日
        /// </summary>
        /// <param name="date">要检查的日期</param>
        /// <returns>如果是交易日返回true，否则返回false</returns>
        public bool IsTradingDay(DateTime date)
        {
            // 如果已经加载了交易日历，则直接查询
            if (_tradingDays.Count > 0)
            {
                return _tradingDays.Contains(date.Date);
            }
            
            // 如果没有加载交易日历，则使用默认判断逻辑（周一到周五，不考虑节假日）
            var dayOfWeek = date.DayOfWeek;
            return dayOfWeek != DayOfWeek.Saturday && dayOfWeek != DayOfWeek.Sunday;
        }
    }
} 